GtkStack: add transition-running property
authorXavier Claessens <xavier.claessens@collabora.co.uk>
Mon, 11 Nov 2013 21:38:35 +0000 (16:38 -0500)
committerXavier Claessens <xavier.claessens@collabora.co.uk>
Tue, 12 Nov 2013 15:27:45 +0000 (10:27 -0500)
This is useful to know when the transition is done we can
remove the child from the stack.

https://bugzilla.gnome.org/show_bug.cgi?id=711494

docs/reference/gtk/gtk3-sections.txt
gtk/gtkstack.c
gtk/gtkstack.h

index c2287aae3668086df1c4f973907116aab9873ce5..cc56f00267ec4253fa873c2f23ae3e8b744ffa14 100644 (file)
@@ -7721,6 +7721,7 @@ gtk_stack_get_transition_duration
 GtkStackTransitionType
 gtk_stack_set_transition_type
 gtk_stack_get_transition_type
+gtk_stack_get_transition_running
 </SECTION>
 
 <SECTION>
index 830b3c6e70aa62a8abc7d37f5e6db3eac93825ca..1f0da9e3d41d24ef9b500e875428a13ac3ffc5ba 100644 (file)
@@ -85,6 +85,7 @@ enum  {
   PROP_VISIBLE_CHILD_NAME,
   PROP_TRANSITION_DURATION,
   PROP_TRANSITION_TYPE,
+  PROP_TRANSITION_RUNNING,
   LAST_PROP
 };
 
@@ -237,6 +238,9 @@ gtk_stack_get_property (GObject   *object,
     case PROP_TRANSITION_TYPE:
       g_value_set_enum (value, gtk_stack_get_transition_type (stack));
       break;
+    case PROP_TRANSITION_RUNNING:
+      g_value_set_boolean (value, gtk_stack_get_transition_running (stack));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -394,6 +398,11 @@ gtk_stack_class_init (GtkStackClass *klass)
                                                          GTK_TYPE_STACK_TRANSITION_TYPE,
                                                          GTK_STACK_TRANSITION_TYPE_NONE,
                                                          GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+  stack_props[PROP_TRANSITION_RUNNING] = g_param_spec_boolean ("transition-running",
+                                                               P_("Transition running"),
+                                                               P_("Whether or not the transition is currently running"),
+                                                               FALSE,
+                                                               GTK_PARAM_READABLE);
 
   g_object_class_install_properties (object_class, LAST_PROP, stack_props);
 
@@ -780,6 +789,7 @@ gtk_stack_transition_cb (GtkStack      *stack,
     {
       gtk_widget_set_opacity (GTK_WIDGET (stack), 1.0);
       priv->tick_id = 0;
+      g_object_notify_by_pspec (G_OBJECT (stack), stack_props[PROP_TRANSITION_RUNNING]);
 
       return FALSE;
     }
@@ -796,6 +806,7 @@ gtk_stack_schedule_ticks (GtkStack *stack)
     {
       priv->tick_id =
         gtk_widget_add_tick_callback (GTK_WIDGET (stack), (GtkTickCallback)gtk_stack_transition_cb, stack, NULL);
+      g_object_notify_by_pspec (G_OBJECT (stack), stack_props[PROP_TRANSITION_RUNNING]);
     }
 }
 
@@ -808,6 +819,7 @@ gtk_stack_unschedule_ticks (GtkStack *stack)
     {
       gtk_widget_remove_tick_callback (GTK_WIDGET (stack), priv->tick_id);
       priv->tick_id = 0;
+      g_object_notify_by_pspec (G_OBJECT (stack), stack_props[PROP_TRANSITION_RUNNING]);
     }
 }
 
@@ -1268,6 +1280,27 @@ gtk_stack_set_transition_type (GtkStack              *stack,
                             stack_props[PROP_TRANSITION_TYPE]);
 }
 
+/**
+ * gtk_stack_get_transition_running:
+ * @stack: a #GtkStack
+ *
+ * Returns whether the @stack is currently in a transition from one page to
+ * another.
+ *
+ * Return value: %TRUE if the transition is currently running, %FALSE otherwise.
+ *
+ * Since: 3.12
+ */
+gboolean
+gtk_stack_get_transition_running (GtkStack *stack)
+{
+  GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
+
+  g_return_val_if_fail (GTK_IS_STACK (stack), FALSE);
+
+  return (priv->tick_id != 0);
+}
+
 /**
  * gtk_stack_get_visible_child:
  * @stack: a #GtkStack
index 82e527c4591eade1e7915c9ab990ef4eac893ef1..d0bb47188a269dd7fd04d6fcdde2dd2b734bcfa9 100644 (file)
@@ -108,6 +108,8 @@ void                   gtk_stack_set_transition_type     (GtkStack
                                                           GtkStackTransitionType  transition);
 GDK_AVAILABLE_IN_3_10
 GtkStackTransitionType gtk_stack_get_transition_type     (GtkStack               *stack);
+GDK_AVAILABLE_IN_3_12
+gboolean               gtk_stack_get_transition_running  (GtkStack               *stack);
 
 G_END_DECLS